package com.flying.classmember.inner;


/**
 * @ClassName: InnerDemo
 * @author: flying
 * @date 2024 2024/12/11 10:46
 * @Description: 内部类的使用
 *  内部类： 在类的内部在定义类，通常分为4中内部类
 *  1. 成员内部类： 定义在类里方法外，和成员变量的书写位置一样
 *  2. 静态内部类： 定义的位置和成员内部类一样，只是多了一个static关键字
 *  3. 局部内部类： 定义在方法内部的类称为局部内部类
 *  4. 匿名内部类： 是局部内部类的一种特殊形式（重点），很多倍Lambda表达式替代了
 */
public class InnerDemo {

    public static void main(String[] args) {

        // 1. 成员内部类的用法
        // 创建外部类对象，调用外部类对象返回一个内部类对象
        MemberOuter memberOuter = new MemberOuter();
        MemberOuter.MemberInner inner = memberOuter.getInner();
        inner.test();

        // 直接通过外部类创建内部类对象
        MemberOuter.MemberInner inner1 = new MemberOuter().new MemberInner();
        inner1.test();


        System.out.println(MemberOuter.MemberInner.str);


        //  静态内部类不持有外部类对象的引用
        StaticOuter.StaticInner staticInner= new  StaticOuter.StaticInner();

    }

}
